#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct Arr
{
	int * pBase = NULL; //数组首地址
	int cnt; //当前元素个数
	int len; //数组大小
} Array, *pArray;


bool init_array(pArray arr, int len); //初始化数组
bool append(pArray arr, int val); //数组中添加一个元素
bool is_empty(pArray arr);  // //是否空
bool is_full(pArray arr);  //是否满
void sort(pArray arr);     //数组排序
void reversal(pArray arr); //翻转数组
void show_array(pArray arr); //打印数组
bool insert(pArray arr, int pos, int val); //pos 表示第一个元素。例如 pos=2，表示第二个元素。但是下标是1
bool del(pArray arr, int pos, int * val); // int * val保存删除的元素
void free_array(pNode arr); //释放数组



bool is_full(pArray arr){
	return arr->cnt == arr->len;
}

bool is_empty(pArray arr){
	return arr->cnt == 0;
}

void free_array(pArray arr) {
    arr->cnt = NULL;
    arr->len = NULL;
    if (NULL != arr->pBase) {
        free(arr->pBase);
    }
}


bool init_array(pArray arr, int len){
	if (len <= 0) {
		printf("len is too small");
		return false;
	}

	arr->pBase = (int*)malloc(sizeof(int)*len);
	if (NULL == arr->pBase){
		printf("init array is fail");
		return false;
	}
	else{
		arr->cnt = 0;
		arr->len = len;
		return true;
	}


}

bool append(pArray arr, int val){
	if (is_full(arr)){
		return false;
	}
	arr->pBase[arr->cnt] = val;
	arr->cnt++;
	return true;
}


void sort(pArray arr){
	for (int i = 0; i < arr->cnt; i++) {
		for (int j = 0; j < arr->cnt - 1 - i; j++) {
			if (arr->pBase[j] > arr->pBase[j + 1]) {
				int temp = arr->pBase[j];
				arr->pBase[j] = arr->pBase[j + 1];
				arr->pBase[j + 1] = temp;
			}
		}
	}
}


void show_array(pArray arr){

	if (is_empty(arr)){
		printf("array is empty");
	}
	else{
		for (int i = 0; i < arr->cnt; i++) {
			printf("%d ", arr->pBase[i]);
		}
	}

}

void reversal(pArray arr){
	int i = 0;
	int j = arr->cnt - 1;
	while (i < j){
		int temp = arr->pBase[i];
		arr->pBase[i] = arr->pBase[j];
		arr->pBase[j] = temp;
		i++;
		j--;
	}
}


bool insert(pArray arr, int pos, int val){
	if (is_full(arr)){
		printf("array is full");
		return false;
	}

	if (pos<=0 || pos>arr->cnt + 1){
		return false;
	}

	for (int i = arr->cnt - 1; i >= pos - 1; i--) {
		arr->pBase[i + 1] = arr->pBase[i];
	}
	arr->pBase[pos - 1] = val;
	arr->cnt++;
	return true;
}


bool del(pArray arr, int pos, int * val){
	if (is_empty(arr)){
		printf("array is empty");
		return false;
	}

	if (pos<=0 || pos>arr->cnt){
		return false;
	}

	*val = arr->pBase[pos - 1];

	for (int i = pos; i < arr->cnt; i++){
		arr->pBase[i - 1] = arr->pBase[i];
	}
	arr->cnt--;
	return true;

}






























